package com.gitee.cirnochat.user.model.enums;

import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonValue;
import com.gitee.cirnochat.common.model.enums.BaseEnum;
import lombok.Getter;

/**
 * 用户状态枚举类
 * @author FlanChan
 * @since 2025/4/21
 */
@Getter
public enum UserStatus implements BaseEnum<Integer> {

    /**
     * 离线
     */
    OFFLINE(0),
    /**
     * 在线
     */
    ONLINE(1);


    @EnumValue // 用于 MyBatis-Plus 映射数据库值
    @JsonValue // 用于 JSON 序列化
    private final Integer value;

    UserStatus(Integer value) {
        this.value = value;
    }


    public static UserStatus fromValueStrict(Integer value) {
        if (value == null) {
            return null;
        }
        for (UserStatus status : UserStatus.values()) {
            if (status.getValue().equals(value)) {
                return status;
            }
        }
        return null;
    }

    public static UserStatus fromValueStrict(String value) {
        if (value == null) {
            return null;
        }
        Integer intValue = Integer.valueOf(value);
        for (UserStatus status : UserStatus.values()) {
            if (status.getValue().equals(intValue)) {
                return status;
            }
        }
        return null;
    }

    public static UserStatus fromValue(Integer value) {
        if (value == null) {
            return OFFLINE; // 默认返回 OFFLINE 状态
        }
        for (UserStatus status : UserStatus.values()) {
            if (status.getValue().equals(value)) {
                return status;
            }
        }
        return OFFLINE; // 默认返回 OFFLINE 状态
    }

    public static UserStatus fromValue(String value) {
        if (value == null) {
            return OFFLINE; // 默认返回 OFFLINE 状态
        }
        Integer intValue = Integer.valueOf(value);
        for (UserStatus status : UserStatus.values()) {
            if (status.getValue().equals(intValue)) {
                return status;
            }
        }
        return OFFLINE; // 默认返回 OFFLINE 状态
    }

    public static boolean isDownStatus(UserStatus userStatus) {
        return userStatus == UserStatus.OFFLINE;
    }
}
